import { mapState } from 'vuex'
import store from "@/store"
import {toast, useRouter } from "@/utils/utils.js"

// 尝试将用户在根目录中的store/index.js的vuex的state变量，全部加载到全局变量中
let $uStoreKey = [];
try{
	$uStoreKey = store.state ? Object.keys(store.state) : [];
}catch(e){
	
}

module.exports = {
	created() {
		// 将vuex方法挂在到$u中
		// 使用方法为：如果要修改vuex的state中的user.name变量为"史诗" => this.$u.vuex('user.name', '史诗')
		// 如果要修改vuex的state的version变量为1.0.1 => this.$u.vuex('version', '1.0.1')
		this.$u.vuex = (name, value) => {
			this.$store.commit('$uStore', {
				name,value
			})
		}
	},
	computed: {
		// 将vuex的state中的所有变量，解构到全局混入的mixin中
		...mapState($uStoreKey)
	},
	methods: {
		preLogin(){
			if(!this.token){
				useRouter(this.$systemConfig.login_page, 'reLaunch')
				return false;
			}
			if(!this.userInfo){
				useRouter(this.$systemConfig.login_page, 'reLaunch')
				return false;
			}
			return true;
		},
		async updateUserInfo(){
			let res = await this.$api.getUserInfo();
			console.log("获取用户信息",res)
			if(res.code==0&&res.msg=="success"){
				this.$u.vuex("userInfo",res.user)
				return true;
			}else{
				//console.log("获取用户信息",res)
				toast("用户信息已过期，请重新登录")
				this.loginOut()
			}
			return false;
		},
		async getUserInfo() {
			let res = await this.preLogin();
			console.log(res)
			if (res) {
				//更新用户信息
			  await	this.updateUserInfo();
			}
		},
		hasLogin(){
			return this.userInfo&&(this.userInfo.patientTel||this.userInfo.mobile)?true:false
		},
		loginOut(){
			toast("用户信息已过期，重新登录")
			this.$u.vuex("token",null)
			this.$u.vuex("userType",null)
			this.$u.vuex("userInfo",null)
			useRouter(this.$systemConfig.login_page, 'reLaunch')
		}
	}
}
